package com.xmmj.baselibrary.widget.wheelview

import kotlin.jvm.JvmOverloads
import kotlin.math.abs

/**
 * 显示数字的 WheelAdapter
 */
class NumericWheelAdapter
@JvmOverloads constructor(
    private val minValue: Int = DEFAULT_MIN_VALUE,
    private val maxValue: Int = DEFAULT_MAX_VALUE,
    private val format: String? = null
) : WheelAdapter {

    override fun getItem(index: Int): String? {
        var result: String? = ""
        if (index >= 0 && index < getItemsCount()) {
            val value = minValue + index
            //如果 format 不为 null, 那么格式化字符串, 如果为 null, 直接返回数字
            result = if (format != null) {
                String.format(format, value)
            } else {
                value.toString()
            }
            return result
        }
        return null
    }

    override fun getItemsCount(): Int {
        //返回数字总个数
        return maxValue - minValue + 1
    }

    override fun getMaximumLength(): Int {
        //获取 最大值 和 最小值 中的 较大的数字
        val max = abs(maxValue).coerceAtLeast(abs(minValue))
        //获取这个数字 的 字符串形式的 字符串长度
        var maxLen = max.toString().length
        if (minValue < 0) {
            maxLen++
        }
        return maxLen
    }

    companion object {
        /** 默认最小值  */
        const val DEFAULT_MAX_VALUE = 9

        /** 默认最大值  */
        private const val DEFAULT_MIN_VALUE = 0
    }
}